/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package view;

import com.sun.lwuit.Command;
import com.sun.lwuit.Form;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.layouts.BorderLayout;
import core.OrderManager;
import core.ScreenEngine;
import datamodel.Order;
import view.additional.CellItem;
import view.additional.ThumbList;
import view.additional.TickerRenderer;
import view.commands.BackCommand;

/**
 *
 * @author kvest
 */
public class OrdersListForm extends Form implements OrderManager.NewOrderNotifier, OrderManager.DeleteOrderNotifier, OrderManager.UpdateOrderNotifier 
{
    private static final int DETAILS_COMMAND_ID = 1;

    private ThumbList items;
    private Command details;
            
    private OrderInformationForm orderInformationForm;
    
    public OrdersListForm()
    {
        super("orders");

        init();
        
        //Подписываемся на события изменения заказов
        OrderManager.getManager().setNewOrderNotifier(this);
        OrderManager.getManager().setUpdateOrderNotifier(this);
        OrderManager.getManager().setDeleteOrderNotifier(this);
    }

    private void init()
    {
        setLayout(new BorderLayout());
        setScrollable(false);

        //Создаем список
        items = new ThumbList();
        items.setSelectCommandText("...");
        items.setFixedSelection(ThumbList.FIXED_NONE_CYCLIC);
        TickerRenderer render = new TickerRenderer();
        items.setRenderer(render);

        addComponent(BorderLayout.CENTER, items);

        //Команды
        details = new Command("inform", DETAILS_COMMAND_ID)
        {
            public void actionPerformed(ActionEvent evt)
            {
                selectAction();

                evt.consume();
            }
        };
        addCommand(details);

        items.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent evt) 
            {
                details.actionPerformed(evt);
            }
        });
        
        addCommand(new BackCommand());
    }

    public void show()
    {
        //Чистим форму
        clear();
        
        //Заполняем список
        OrderManager.Pair[] orders = OrderManager.getManager().getPreviewList();
        for (int i = 0; i < orders.length; ++i)
        {
            items.addItem(new CellItem(orders[i].getId(), orders[i].getValue()));
        }
        
        super.show();
    }
    
    private void clear()
    {
        while (items.getModel().getSize() > 0)
        {
            items.getModel().removeItem(0);
        }
    }
    
    private void selectAction()
    {
        CellItem selected = (CellItem)items.getSelectedItem();
        if (selected != null)
        {
            //Создаем форму если надо
            if (orderInformationForm == null)
            {
                orderInformationForm = new OrderInformationForm();
            }
            
            //Устанавливаем отображаемый заказ и Отображаем форму
            orderInformationForm.setOrder(selected.getId());
            ScreenEngine.getEngine().push(orderInformationForm);
        }
    }
    
    public void newOrder(Order order)
    {
        Object selected = null;
        
        //Удаляем заказ, если такой есть
        for (int i = items.getModel().getSize() - 1; i >= 0; --i)
        {
            if (((CellItem)items.getModel().getItemAt(i)).getId() == order.getId())
            {
                if (selected == null)
                {
                    selected = items.getSelectedItem();
                }
                items.getModel().removeItem(i);
            }
        }
        
        //Добавляем
        items.addItem(new CellItem(order.getId(), order.getPreviewText()));
        
        //Возобновляем фокус
        if (selected != null)
        {
            items.setSelectedItem(selected);
        }

        items.repaint();
    }
    
    public void deleteOrder(int orderID)
    {
        Object selected = null;
        
        //Удаляем
        for (int i = items.getModel().getSize() - 1; i >= 0; --i)
        {
            if (((CellItem)items.getModel().getItemAt(i)).getId() == orderID)
            {
                if (selected == null)
                {
                    selected = items.getSelectedItem();
                }
                items.getModel().removeItem(i);
            }
        }
       
        //Возобновляем фокус
        if (selected != null)
        {
            items.setSelectedItem(selected);
        }

        items.repaint();

        //Если этот заказ сейчас показывается
        if (ScreenEngine.getEngine().getCurrent() == orderInformationForm && orderInformationForm.getOrderID() == orderID)
        {
            //Удаляем форму с информацией
            ScreenEngine.getEngine().pop(true);
            
            //Показываем сообщение
            MessageBox.showModeless("message", "order_deleted"); 
        }
    }
    
    public void updateOrder(Order order)
    {
        //Изменяем
        for (int i = 0; i < items.getModel().getSize(); ++i)
        {
            if (((CellItem)items.getModel().getItemAt(i)).getId() == order.getId())
            {
                ((CellItem)items.getModel().getItemAt(i)).setText(order.getPreviewText());
            }
        }

        items.repaint();

        //Если этот заказ сейчас показывается
        if (ScreenEngine.getEngine().getCurrent() == orderInformationForm && orderInformationForm.getOrderID() == order.getId())
        {
            //Обновляем информацию
            orderInformationForm.updateOrder(order);
            
            //Показываем сообщение
            MessageBox.showModeless("message", "order_updated"); 
        }
    }
    
   
}
